package com.tesisutn.restsoft.persistencia.interfaces.base;

import java.util.List;

import com.tesisutn.restsoft.dominio.interfaces.ObjetoDeDominio;
public interface Persistencia<T extends ObjetoDeDominio> {
    /**
     * Elimina un objeto del repositorio
     * @param objeto Objeto a eliminar
     */
    void remove(T entity);

    /**
     * Guarda un objeto en el repositorio
     * @param objeto Objeto a persistir
     */
    void save(T entity);
    
    /**
     * Guarda varios objetos en el repositorio
     * @param objeto Objeto a persistir
     */
    void save(Iterable<T> entities);
    
    /**
     * Actualiza un objeto en el repositorio
     * @param objeto Objeto a persistir
     */
    void update(T entity);
    
    /**
     * Actualiza varios objetos en el repositorio
     * @param objeto Objeto a persistir
     */
    void update(Iterable<T> entities);

    /**
     * Recupera todos los objetos del repositorio
     */
    List<T> findAll();

    /**
     * Recupera un objeto del repositorio con determinado id
     */
    T get(Object id);
}
